home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / hardware / 386id / misc.inc < prev    next >
Text File  |  1994-02-22  |  7KB  |  351 lines

  1. COMMENT|   MASM Macros     |
  2.  
  3. .xcref REGSAVE,REGREST,NPPROC,FPPROC,MEND
  4.  
  5.      if1
  6. REGSAVE  macro     LIST        ; Register save macro
  7.  
  8.      irp     XX,<LIST>
  9.      push     XX
  10.      endm
  11.  
  12.      endm            ; REGSAVE
  13.  
  14.  
  15. REGREST  macro     LIST        ; Register restore macro
  16.  
  17.      irp     XX,<LIST>
  18.      pop     XX
  19.      endm
  20.  
  21.      endm            ; REGREST
  22.  
  23.  
  24. NPPROC     macro     @PROC,@T1,@T2,@T3,@T4,@T5,@T6,@T7,@T8,@T9,@T10
  25.      subttl  @PROC Procedure @T1 @T2 @T3 @T4 @T5 @T6 @T7 @T8 @T9 @T10
  26.      page
  27.      public  @PROC
  28. @PROC     proc     near
  29.      endm            ; NPPROC
  30.  
  31.  
  32. FPPROC     macro     @PROC,@T1,@T2,@T3,@T4,@T5,@T6,@T7,@T8,@T9,@T10
  33.      subttl  @PROC Procedure @T1 @T2 @T3 @T4 @T5 @T6 @T7 @T8 @T9 @T10
  34.      page
  35.      public  @PROC
  36. @PROC     proc     far
  37.      endm            ; FPPROC
  38.  
  39.  
  40. MEND     macro     @START
  41.  
  42.      if1
  43. %OUT Pass 1 complete
  44.      else
  45. %OUT Pass 2 complete
  46.      endif
  47.  
  48.      end     @START
  49.  
  50.      endm            ; MEND
  51.  
  52.  
  53. .xcref CPUID
  54. CPUID     macro
  55.  
  56.      db     0Fh,0A2h    ; MASM doesn't support CPUID as yet
  57.  
  58.      endm            ; CPUID
  59.  
  60.  
  61. STROUT     macro     TEXT
  62.  
  63.      lea     dx,TEXT    ; DS:DX ==> string to display
  64.      mov     ah,09h     ; Function code to display string
  65.      int     21h        ; Request DOS service
  66.  
  67.      endm            ; STROUT
  68.  
  69.  
  70. GETINT     macro     NN
  71.  
  72.      mov     ah,35h     ; Function code to get interrupt handler
  73.      mov     al,NN        ; Get interrupt #
  74.      int     21h        ; Request DOS service
  75.  
  76.      endm            ; GETINT
  77.  
  78.  
  79. SETINT     macro     NN,FCN
  80.  
  81. ifnb <FCN>
  82.      lea     dx,FCN     ; DS:DX ==> interrupt handler
  83. endif
  84.      mov     ah,25h     ; Function code to set interrupt handler
  85.      mov     al,NN        ; Get interrupt #
  86.      int     21h        ; Request DOS service
  87.  
  88.      endm            ; SETINT
  89.  
  90.  
  91. .xcref PUSHD
  92. PUSHD     macro     NN        ; 32-bit PUSH
  93.  
  94.      db     66h
  95.      push     NN
  96.  
  97.      endm            ; PUSHD
  98.  
  99.  
  100. .xcref SGDTD
  101. SGDTD     macro     I,J,K,L,M,N
  102.  
  103.      db     66h        ; Use 32-bit pointer
  104.      sgdt      I J K L M N
  105.  
  106.      endm            ; SGDTD
  107.  
  108.  
  109. .xcref SIDTD
  110. SIDTD     macro     I,J,K,L,M,N
  111.  
  112.      db     66h        ; Use 32-bit pointer
  113.      sidt      I J K L M N
  114.  
  115.      endm            ; SIDTD
  116.  
  117.  
  118. .xcref LGDTD
  119. LGDTD     macro     I,J,K,L,M,N
  120.  
  121.      db     66h        ; Use 32-bit pointer
  122.      lgdt      I J K L M N
  123.  
  124.      endm            ; LGDTD
  125.  
  126.  
  127. .xcref LIDTD
  128. LIDTD     macro     I,J,K,L,M,N
  129.  
  130.      db     66h        ; Use 32-bit pointer
  131.      lidt      I J K L M N
  132.  
  133.      endm            ; LIDTD
  134.  
  135.  
  136.      endif            ; IF1 ******************************
  137.  
  138.  
  139. ; Useful equates
  140.  
  141. .xcref @OPCOD_JMPF
  142. @OPCOD_INT  equ  0CDh        ; Opcode for INT
  143. @OPCOD_JMPF equ  0EAh        ; Opcode for immediate far jump
  144.  
  145. .xcref @BIT0
  146. @BIT0     equ     01h        ; Bit #0 in a byte
  147.  
  148. .xcref BEL,TAB,CR,LF,EOS
  149. BEL     equ     07h        ; Bell
  150. TAB     equ     09h        ; Tab
  151. CR     equ     0Dh        ; Carriage return
  152. LF     equ     0Ah        ; Linefeed
  153. EOS     equ     '$'            ; End of string
  154.  
  155. .xcref @IMR,@IMR2
  156. @IMR     equ     21h        ; 8259 port for Master Mask Register
  157. @IMR2     equ     21h+80h    ; ...        Slave  Mask Register
  158.  
  159. .xcref @8255_A,@8255_B,@8042_ST,@PS2_A
  160. @8255_A  equ     60h        ; Read-only in PC/XT, Read/write in AT
  161. @8255_B  equ     61h        ; Read/write
  162. @8042_ST equ     64h        ; Status port
  163. @PS2_A     equ     92h        ; PS/2 System Control Port A
  164.  
  165. .xcref @S2C_DIS,@S2C_ENA,@S2C_ROUT,@S2C_WOUT
  166. .xcref @S2C_SHUT,@S2C_RESET
  167. @S2C_DIS    equ  0ADh        ; Keyboard disable
  168. @S2C_ENA    equ  0AEh        ; Keyboard enable
  169. @S2C_ROUT   equ  0D0h        ; Read    output port
  170. @S2C_WOUT   equ  0D1h        ; Write output port
  171. @S2C_SHUT   equ  0FEh        ; Shutdown
  172. @S2C_RESET  equ  0FFh        ; Ensure in stable state
  173.  
  174. .xcref @S2K_LED,@S2K_ENABLE
  175. @S2K_LED    equ  0EDh        ; Set/reset LEDs
  176. @S2K_ENABLE equ  0F4h        ; Enable keyboard
  177.  
  178. .xcref @K2S_RESEND
  179. @K2S_RESEND equ  0FEh    ; Resend last command
  180.  
  181. .xcref CPL0_DATA,CPL0_CODE,CPL0_BUSY3
  182. CPL0_DATA equ     10010010b    ; Data, writable
  183. CPL0_CODE equ     10011010b    ; Code, nonconforming, readable
  184. CPL0_BUSY3 equ     10001011b    ; Busy 386 TSS        B
  185.  
  186.  
  187. ; Records and Structures
  188.  
  189. .xcref @8255_B_REC
  190. @8255_B_REC record $KEYB:1,$FILLB:1,$XTPAR:2,$ATPAR:2,$SPKR:1,$TIMER2:1
  191.  
  192.  
  193. .xcref @8042_ST_REC
  194. @8042_ST_REC record $PAR:1,$RCVTIM:1,$TRNTIM:1,$KINH:1,$DATA:1,$SYSTST:1,$INPFULL:1,$OUTFULL:1
  195.  
  196.  
  197. .xcref @8042_OUT
  198. @8042_OUT record $S2O_DATA:1,$S2O_CLOCK:1,$S2O_IBFMT:1,$S2O_OBFUL:1,$S2O_UNDEF:2,$S2O_GATE:1,$S2O_RESET:1
  199.  
  200. .xcref @S2O_D20,@S2O_E20
  201. @S2O_D20    equ  0DDh    ; Disable A20
  202. @S2O_E20    equ  0DFh    ; Enable A20
  203.  
  204.  
  205. ; PS/2 System Control Port A
  206.  
  207. .xcref PS2SCP_A
  208. PS2SCP_A record  $PS2_FD0:1,$PS2_FD1:1,$PS2_RSV0:1,$PS2_WD:1,$PDS2_LOCK:1,$PS2_RSV1:1,$PS2_GATE:1,$PS2_RESET:1
  209.  
  210.  
  211. .xcref CPUFLAGS,$AC,$VM,$RF
  212. .xcref        $R0,$NT,$IOPL,$OF,$DF,$IF,$TF,$SF,$ZF,$R1,$AF,$R2,$PF,$R3,$CF
  213. CPUFLAGS record  $ID:1,$VIP:1,$VIF:1,$AC:1,$VM:1,$RF:1, \
  214.          $R0:1,$NT:1,$IOPL:2,$OF:1,$DF:1,$IF:1,$TF:1,$SF:1,$ZF:1,$R1:1,$AF:1,$R2:1,$PF:1,$R3:1,$CF:1
  215.  
  216.  
  217. .xcref CR0FLAGS,$PG,$CD,$NW,$CR0RSV0,$AM,$CR0RSV1,$WP
  218. .xcref $CR0RSV2,$NE,$ET,$TS,$EM,$MP,$PE
  219. CR0FLAGS record  $PG:1,$CD:1,$NW:1,$CR0RSV0:10,$AM:1,$CR0RSV1:1,$WP:1,\
  220.          $CR0RSV2:10,$NE:1,$ET:1,$TS:1,$EM:1,$MP:1,$PE:1
  221.  
  222.  
  223. ; Descriptor type record for system GDT entries
  224.  
  225. .xcref DSYS_REC,$DS_386,$DS_GATE,$DS_BUSY,$DS_TASK
  226. DSYS_REC record  $DS_386:1,$DS_GATE:1,$DS_BUSY:1,$DS_TASK:1
  227.  
  228.  
  229. ; Move block Descriptor Table Entry structure
  230.  
  231. .xcref MDTE_STR,MDTE_DUMMY,MDTE_GDT,MDTE_DS,MDTE_ES,MDTE_BIOS,MDTE_SS
  232. MDTE_STR struc
  233.  
  234. MDTE_DUMMY dq     ?        ; 00:  First entry not accessible
  235. MDTE_GDT  dq     ?        ; 08:  Global descriptor table
  236. MDTE_DS   dq     ?        ; 10:  DS ...
  237. MDTE_ES   dq     ?        ; 18:  ES ...
  238. MDTE_BIOS dq     ?        ; 20:  Temporary BIOS ...
  239. MDTE_SS   dq     ?        ; 28:  SS ...
  240.  
  241. MDTE_STR ends
  242.  
  243.  
  244. ; Dscriptor table structure
  245.  
  246. .xcref DESC_STR,DESC_SEGLM0,DESC_BASE01,DESC_BASE2,DESC_ACCESS,DESC_SEGLM1,DESC_BASE3
  247. DESC_STR struc
  248.  
  249. DESC_SEGLM0 dw     ?        ; 0-1: Segment limit, 0-15
  250. DESC_BASE01 dw     ?        ; 2-3: Segment base bytes 0-1
  251. DESC_BASE2  db     ?        ; 4  :            byte  2
  252. DESC_ACCESS db     ?        ; 5  : Access rights
  253. DESC_SEGLM1 db     ?        ; 6  : Segment limit, 16-19, and flags
  254. DESC_BASE3  db     ?        ; 7  :            byte  3
  255.  
  256. DESC_STR ends
  257.  
  258.  
  259. ; Descriptor Table Register Structure
  260.  
  261. .xcref DTR_STR,DTR_LIM,DTR_BASE
  262. DTR_STR  struc
  263.  
  264. DTR_LIM  dw     ?        ; Limit (#bytes - 1)
  265. DTR_BASE dd     ?        ; Base offset
  266.  
  267. DTR_STR  ends
  268.  
  269.  
  270. ; Structures for Virtual DMA Services
  271.  
  272. .xcref XDDS_STR,XDDS_SIZE,XDDS_FVEC,XDDS_AVL,XDDS_USED,XDDS_ADDR0,XDDS_SIZE0
  273. XDDS_STR struc
  274.  
  275. XDDS_SIZE dd     ?        ; 00-03:  Region size
  276. XDDS_FVEC df     ?        ; 04-09:  Linear segment/selector:offset
  277.       dw     ?        ; 0A-0B:  (reserved)
  278. XDDS_AVL  dw     1        ; 0C-0D:  # entries available
  279. XDDS_USED dw     ?        ; 0E-0F:  # entries used (or would be used)
  280. XDDS_ADDR0 dd     ?        ; 10-13:  Region #0 physical address
  281. XDDS_SIZE0 dd     ?        ; 14-17:  Region #0 size in bytes
  282.  
  283. XDDS_STR ends
  284.  
  285.  
  286. ; Equate for testing VDS presence byte at 40:7B
  287.  
  288. .xcref @VDS_ENA
  289. @VDS_ENA equ     00100000b    ; Virtual DMA services enabled
  290.  
  291.  
  292. ; Equates for calling VDS functions
  293.  
  294. .xcref @VDS_SLOCK,@VDS_SUNLK
  295. @VDS_SLOCK equ     8105h        ; Scatter/gather lock DMA region
  296. @VDS_SUNLK equ     8106h        ; Scatter/gather unlock DMA region
  297.  
  298.  
  299. .xcref VECTOR,VOFF,VSEG
  300. VECTOR     struc
  301.  
  302. VOFF     dw     ?        ; Offset
  303. VSEG     dw     ?        ; Segment
  304.  
  305. VECTOR     ends
  306.  
  307.  
  308. .xcref HILO_STR,LO,HI
  309. HILO_STR struc
  310.  
  311. LO     db     ?        ; Register low-order byte
  312. HI     db     ?        ; Register high-order byte
  313.  
  314. HILO_STR ends
  315.  
  316.  
  317. .xcref EGP_STR,ELO,EHI
  318. EGP_STR  struc
  319.  
  320. ELO     dw     ?        ; Extended register low-order word
  321. EHI     dw     ?        ; Extended register high-order word
  322.  
  323. EGP_STR  ends
  324.  
  325.  
  326. .xcref EDD_STR,EDD
  327. EDD_STR struc
  328.  
  329. EDD     dd     ?        ; Doubleword
  330.  
  331. EDD_STR ends
  332.  
  333.  
  334. .xcref EDF_STR,EDF
  335. EDF_STR struc
  336.  
  337. EDF     df     ?        ; Six-bytes
  338.  
  339. EDF_STR ends
  340.  
  341.  
  342. .xcref EDQ_STR,EDQLO,EDQHI
  343. EDQ_STR struc
  344.  
  345. EDQLO     dd     ?        ; Low-order dword
  346. EDQHI     dd     ?        ; High-...
  347.  
  348. EDQ_STR ends
  349.  
  350.  
  351.